home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / ver / 001 / main.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  3KB  |  142 lines

  1. /* 男は一本槍 */
  2.  
  3. /* main.c */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <ctype.h>
  8. #include <conio.h>
  9. #include <sys/dos.h>
  10. #include <sys/iocs.h>
  11.  
  12. #define GLOBAL_DEFINE        /* グローバル変数を確保する */
  13. #include "main.h"
  14.  
  15. static int old_crtmod;
  16.  
  17.  
  18.  
  19. void usage (void)
  20. {
  21.     printf (
  22.                "縦スクロールシューティング・一本槍 IPPON.X ver0.01\n"
  23.                "        programmed by Mitsuky <FreeSoftware>\n"
  24.                "まだ起動して終了するだけ・エラーチェックはきちんとしてますバージョン\n"
  25.         );
  26. }
  27.  
  28.  
  29.  
  30. /* 終了時に1度だけ呼ばれる・エラーだったら返ってこない */
  31. void Tini (void)
  32. {
  33.     int sp;
  34.  
  35.     switch (error_level) {
  36.     case ERROR_NON:
  37.         /* 画面モードを元に戻す */
  38.         sp = _iocs_b_super (0);
  39.         *(unsigned short *) 0xe8e006 &= 0xfffd;        /* HRL ビットを元に戻す */
  40.         _iocs_b_super (sp);
  41.         _iocs_crtmod (old_crtmod);
  42.         _dos_kflushio (0xff);    /* キーバッファをクリア */
  43.  
  44.         _iocs_tgusemd (1, 3);
  45.         /* break が無い事に注意 */
  46.     case ERROR_GUSEMD:
  47.         _iocs_tgusemd (0, 3);
  48.         /* break が無い事に注意 */
  49.     case ERROR_TUSEMD:
  50.         /* break が無い事に注意 */
  51.     default:
  52.         break;
  53.     }
  54.  
  55.     if (error_level != ERROR_NON) {
  56.         /* エラーが発生した場合 */
  57.         puts (error_message);
  58.         exit (-1);    /* 終了する */
  59.     }
  60. }
  61.  
  62.  
  63.  
  64. /* 起動時に1度だけ呼ばれる */
  65. static void Init (void)
  66. {
  67.     int sp;
  68.     int i;
  69.     static unsigned short crtcdata[9] =
  70.     {69, 6, 11 + 8, 59 - 8, 567, 5, 40, 552, 0x0111};
  71.     unsigned short *d;
  72.  
  73.     error_message = NULL;
  74.  
  75.     /* テキスト画面の使用状況をチェック */
  76.     error_level = ERROR_TUSEMD;
  77.     if (_iocs_tgusemd (1, -1) == 2) {    /* ユーザーが使用中なら */
  78.         error_message = "テキスト VRAM が使用中です";
  79.         Tini ();
  80.     }
  81.     _iocs_tgusemd (1, 2);
  82.     /* グラフィック画面の使用状況をチェック */
  83.     error_level = ERROR_GUSEMD;
  84.     i = _iocs_tgusemd (0, -1);
  85.     if ((i == 1) || (i == 2)) {    /* システムまたはユーザーが使用中なら */
  86.         error_message = "グラフィック VRAM が使用中です";
  87.         Tini ();
  88.     }
  89.     _iocs_tgusemd (0, 2);
  90.  
  91.     error_level = ERROR_NON;
  92.  
  93.  
  94.     /* 画面モードの初期化 */
  95.     /* 256x256ドット 31kHz 256色モードに */
  96.     old_crtmod = _iocs_crtmod (-1);        /* 前の CRTMOD を保存 */
  97.     _iocs_crtmod (10);    /* 256x256dot 31kHz 256色 */
  98.     _iocs_g_clr_on ();    /* 一応 */
  99.  
  100.     /* 256x256 正方形モードを作る */
  101.     sp = _iocs_b_super (0);
  102.     *(unsigned short *) 0xe80028 = crtcdata[8];
  103.     d = (unsigned short *) 0xe80002;
  104.     for (i = 1; i < 8; i++)
  105.         *d++ = crtcdata[i];
  106.     *(unsigned short *) 0xe80000 = crtcdata[0];
  107.  
  108.     *(unsigned short *) 0xe8e006 |= 0b10;    /* HRL ビット */
  109.     *(unsigned short *) 0xeb080c = crtcdata[2] + 4;
  110.     *(unsigned short *) 0xeb080a = crtcdata[0];    /* スプライト */
  111.     *(unsigned short *) 0xeb080e = crtcdata[6];
  112.     *(unsigned int *) 0xe80018 = *(unsigned int *) 0xe8001c
  113.         = *(unsigned int *) 0xe80020 = *(unsigned int *) 0xe80024
  114.         = (0 << 16) + 0;    /* グラフィック画面の座標 */
  115.  
  116.     *(unsigned short *) 0xe82500 = 0b01001001001110;    /* 優先順位 TX>SP>GR */
  117.     _iocs_b_super (sp);
  118. }
  119.  
  120.  
  121. /* ゲーム本体(まだない) */
  122. static void Game (void)
  123. {
  124.     printf ("何かキーを押して下さい\n");
  125.     getche ();
  126. }
  127.  
  128.  
  129.  
  130. int main (int argc, char *argv[])
  131. {
  132.     if (argc != 1) {
  133.         usage ();
  134.         return (-1);
  135.     }
  136.     Init ();
  137.     Game ();
  138.     Tini ();
  139.  
  140.     return (0);
  141. }
  142.